{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I ran the following notebook in a docker container with the following commands:\n",
    "\n",
    "```\n",
    "docker run -it -p 8888:8888 -p 6006:6006 -v `pwd`:/space/ -w /space/ --rm --name md waleedka/modern-deep-learning jupyter notebook --ip=0.0.0.0 --allow-root\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following code is adapted from http://pandas.pydata.org/pandas-docs/stable/10min.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: seaborn in /usr/local/lib/python3.5/dist-packages\n",
      "Requirement already satisfied: tables in /usr/local/lib/python3.5/dist-packages\n",
      "Requirement already satisfied: numpy>=1.8.0 in /usr/local/lib/python3.5/dist-packages (from tables)\n",
      "Requirement already satisfied: numexpr>=2.5.2 in /usr/local/lib/python3.5/dist-packages (from tables)\n",
      "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.5/dist-packages (from tables)\n"
     ]
    }
   ],
   "source": [
    "%%bash\n",
    "pip install seaborn\n",
    "pip install tables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import numpy as np\n",
    "\n",
    "from sklearn.linear_model import LogisticRegressionCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    1.0\n",
       "1    3.0\n",
       "2    5.0\n",
       "3    NaN\n",
       "4    6.0\n",
       "5    8.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8])\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',\n",
       "               '2016-01-05', '2016-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dates = pd.date_range('20160101', periods=6)\n",
    "dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.326973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>-0.784943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>-0.053880</td>\n",
       "      <td>0.649436</td>\n",
       "      <td>0.444564</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2016-01-01 -0.826939 -0.163803 -0.074514  0.326973\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733\n",
       "2016-01-04 -0.475801 -1.205935  2.323941  2.613977\n",
       "2016-01-05 -0.314875  0.047854  0.613834 -0.784943\n",
       "2016-01-06  0.420169 -0.053880  0.649436  0.444564"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>a</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>c</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>d</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A          B    C  D  E    F\n",
       "0  1.0 2013-01-02  1.0  3  a  foo\n",
       "1  1.0 2013-01-02  1.0  3  b  foo\n",
       "2  1.0 2013-01-02  1.0  3  c  foo\n",
       "3  1.0 2013-01-02  1.0  3  d  foo"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame({ 'A' : 1.,\n",
    "                     'B' : pd.Timestamp('20130102'),\n",
    "                     'C' : pd.Series(1,index=list(range(4)),dtype='float32'),\n",
    "                     'D' : np.array([3] * 4,dtype='int32'),\n",
    "                     'E' : pd.Categorical([\"a\",\"b\",\"c\", \"d\"]),\n",
    "                     'F' : 'foo' })\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A           float64\n",
       "B    datetime64[ns]\n",
       "C           float32\n",
       "D             int32\n",
       "E          category\n",
       "F            object\n",
       "dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.dtypes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',\n",
       "                '2016-01-05', '2016-01-06'],\n",
       "               dtype='datetime64[ns]', freq='D'),\n",
       " Index(['A', 'B', 'C', 'D'], dtype='object'),\n",
       " array([[-0.82693928, -0.16380256, -0.07451438,  0.32697251],\n",
       "        [ 0.30012842, -1.15653365,  0.31064788, -1.03327272],\n",
       "        [-0.59957585, -0.02154901, -0.53482524, -3.23773323],\n",
       "        [-0.4758007 , -1.2059352 ,  2.32394139,  2.61397674],\n",
       "        [-0.31487454,  0.04785405,  0.61383393, -0.78494332],\n",
       "        [ 0.42016856, -0.05388024,  0.64943567,  0.44456383]]))"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index, df.columns, df.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Int64Index([0, 1, 2, 3], dtype='int64'),\n",
       " Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object'),\n",
       " array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'a', 'foo'],\n",
       "        [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'b', 'foo'],\n",
       "        [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'c', 'foo'],\n",
       "        [1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'd', 'foo']], dtype=object))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.index, df2.columns, df2.values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.249482</td>\n",
       "      <td>-0.425641</td>\n",
       "      <td>0.548087</td>\n",
       "      <td>-0.278406</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.502399</td>\n",
       "      <td>0.589460</td>\n",
       "      <td>0.978260</td>\n",
       "      <td>1.941086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.568632</td>\n",
       "      <td>-0.908351</td>\n",
       "      <td>0.021776</td>\n",
       "      <td>-0.971190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.395338</td>\n",
       "      <td>-0.108841</td>\n",
       "      <td>0.462241</td>\n",
       "      <td>-0.228985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.146378</td>\n",
       "      <td>-0.029632</td>\n",
       "      <td>0.640535</td>\n",
       "      <td>0.415166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A         B         C         D\n",
       "count  6.000000  6.000000  6.000000  6.000000\n",
       "mean  -0.249482 -0.425641  0.548087 -0.278406\n",
       "std    0.502399  0.589460  0.978260  1.941086\n",
       "min   -0.826939 -1.205935 -0.534825 -3.237733\n",
       "25%   -0.568632 -0.908351  0.021776 -0.971190\n",
       "50%   -0.395338 -0.108841  0.462241 -0.228985\n",
       "75%    0.146378 -0.029632  0.640535  0.415166\n",
       "max    0.420169  0.047854  2.323941  2.613977"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         A    C    D\n",
       "count  4.0  4.0  4.0\n",
       "mean   1.0  1.0  3.0\n",
       "std    0.0  0.0  0.0\n",
       "min    1.0  1.0  3.0\n",
       "25%    1.0  1.0  3.0\n",
       "50%    1.0  1.0  3.0\n",
       "75%    1.0  1.0  3.0\n",
       "max    1.0  1.0  3.0"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2016-01-01 00:00:00</th>\n",
       "      <th>2016-01-02 00:00:00</th>\n",
       "      <th>2016-01-03 00:00:00</th>\n",
       "      <th>2016-01-04 00:00:00</th>\n",
       "      <th>2016-01-05 00:00:00</th>\n",
       "      <th>2016-01-06 00:00:00</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>0.300128</td>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.420169</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>-0.053880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>0.649436</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>0.326973</td>\n",
       "      <td>-1.033273</td>\n",
       "      <td>-3.237733</td>\n",
       "      <td>2.613977</td>\n",
       "      <td>-0.784943</td>\n",
       "      <td>0.444564</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   2016-01-01  2016-01-02  2016-01-03  2016-01-04  2016-01-05  2016-01-06\n",
       "A   -0.826939    0.300128   -0.599576   -0.475801   -0.314875    0.420169\n",
       "B   -0.163803   -1.156534   -0.021549   -1.205935    0.047854   -0.053880\n",
       "C   -0.074514    0.310648   -0.534825    2.323941    0.613834    0.649436\n",
       "D    0.326973   -1.033273   -3.237733    2.613977   -0.784943    0.444564"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>D</th>\n",
       "      <th>C</th>\n",
       "      <th>B</th>\n",
       "      <th>A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>0.326973</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.826939</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>-1.033273</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.300128</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-3.237733</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.599576</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>2.613977</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>-0.475801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.784943</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>-0.314875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.444564</td>\n",
       "      <td>0.649436</td>\n",
       "      <td>-0.053880</td>\n",
       "      <td>0.420169</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   D         C         B         A\n",
       "2016-01-01  0.326973 -0.074514 -0.163803 -0.826939\n",
       "2016-01-02 -1.033273  0.310648 -1.156534  0.300128\n",
       "2016-01-03 -3.237733 -0.534825 -0.021549 -0.599576\n",
       "2016-01-04  2.613977  2.323941 -1.205935 -0.475801\n",
       "2016-01-05 -0.784943  0.613834  0.047854 -0.314875\n",
       "2016-01-06  0.444564  0.649436 -0.053880  0.420169"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(axis=1, ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.326973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>-0.053880</td>\n",
       "      <td>0.649436</td>\n",
       "      <td>0.444564</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>-0.784943</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2016-01-04 -0.475801 -1.205935  2.323941  2.613977\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273\n",
       "2016-01-01 -0.826939 -0.163803 -0.074514  0.326973\n",
       "2016-01-06  0.420169 -0.053880  0.649436  0.444564\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733\n",
       "2016-01-05 -0.314875  0.047854  0.613834 -0.784943"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by='B')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01   -0.826939\n",
       "2016-01-02    0.300128\n",
       "2016-01-03   -0.599576\n",
       "2016-01-04   -0.475801\n",
       "2016-01-05   -0.314875\n",
       "2016-01-06    0.420169\n",
       "Freq: D, Name: A, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['A']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.326973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2016-01-01 -0.826939 -0.163803 -0.074514  0.326973\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[0:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733\n",
       "2016-01-04 -0.475801 -1.205935  2.323941  2.613977"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['20160102':'20160104']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.599576\n",
       "B   -0.021549\n",
       "C   -0.534825\n",
       "D   -3.237733\n",
       "Name: 2016-01-03 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>0.326973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.033273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-3.237733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>2.613977</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>-0.784943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>0.444564</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         D\n",
       "2016-01-01 -0.826939  0.326973\n",
       "2016-01-02  0.300128 -1.033273\n",
       "2016-01-03 -0.599576 -3.237733\n",
       "2016-01-04 -0.475801  2.613977\n",
       "2016-01-05 -0.314875 -0.784943\n",
       "2016-01-06  0.420169  0.444564"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,['A','D']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2016-01-04 -0.475801 -1.205935\n",
       "2016-01-05 -0.314875  0.047854"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3:5,0:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [A, B, C, D]\n",
       "Index: []"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df.A > 0.5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.326973</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>-0.784943</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>-0.053880</td>\n",
       "      <td>0.649436</td>\n",
       "      <td>0.444564</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D      E\n",
       "2016-01-01 -0.826939 -0.163803 -0.074514  0.326973    one\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273    one\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733    two\n",
       "2016-01-04 -0.475801 -1.205935  2.323941  2.613977  three\n",
       "2016-01-05 -0.314875  0.047854  0.613834 -0.784943   four\n",
       "2016-01-06  0.420169 -0.053880  0.649436  0.444564  three"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "df2['E'] = ['one', 'one','two','three','four','three']\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>-0.784943</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D     E\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733   two\n",
       "2016-01-05 -0.314875  0.047854  0.613834 -0.784943  four"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2[df2['E'].isin(['two','four'])]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.826939</td>\n",
       "      <td>-0.163803</td>\n",
       "      <td>-0.074514</td>\n",
       "      <td>0.326973</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-1.156534</td>\n",
       "      <td>0.310648</td>\n",
       "      <td>-1.033273</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.021549</td>\n",
       "      <td>-0.534825</td>\n",
       "      <td>-3.237733</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>-1.205935</td>\n",
       "      <td>2.323941</td>\n",
       "      <td>2.613977</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.314875</td>\n",
       "      <td>0.047854</td>\n",
       "      <td>0.613834</td>\n",
       "      <td>-0.784943</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.420169</td>\n",
       "      <td>-0.053880</td>\n",
       "      <td>0.649436</td>\n",
       "      <td>0.444564</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D  F\n",
       "2016-01-01 -0.826939 -0.163803 -0.074514  0.326973  1\n",
       "2016-01-02  0.300128 -1.156534  0.310648 -1.033273  2\n",
       "2016-01-03 -0.599576 -0.021549 -0.534825 -3.237733  3\n",
       "2016-01-04 -0.475801 -1.205935  2.323941  2.613977  4\n",
       "2016-01-05 -0.314875  0.047854  0.613834 -0.784943  5\n",
       "2016-01-06  0.420169 -0.053880  0.649436  0.444564  6"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['F'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20160101', periods=6))\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.45600000000000002"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.at[dates[0],'A'] = 0.456\n",
    "df.at[dates[0],'A']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.123"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iat[0,1] = 0.123\n",
    "df.iat[0,1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01    5\n",
       "2016-01-02    5\n",
       "2016-01-03    5\n",
       "2016-01-04    5\n",
       "2016-01-05    5\n",
       "2016-01-06    5\n",
       "Freq: D, Name: D, dtype: int64"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,'D'] = np.array([5] * len(df))\n",
    "df.loc[:,'D']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>-0.255574</td>\n",
       "      <td>0.461626</td>\n",
       "      <td>1.589978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>-0.211297</td>\n",
       "      <td>-0.915713</td>\n",
       "      <td>0.669892</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.338290</td>\n",
       "      <td>0.222988</td>\n",
       "      <td>-0.270507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>0.114369</td>\n",
       "      <td>0.499945</td>\n",
       "      <td>-0.545886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>0.085580</td>\n",
       "      <td>-1.282786</td>\n",
       "      <td>1.911286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>0.568756</td>\n",
       "      <td>0.975439</td>\n",
       "      <td>0.181616</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   B         C         D\n",
       "2016-01-01 -0.255574  0.461626  1.589978\n",
       "2016-01-02 -0.211297 -0.915713  0.669892\n",
       "2016-01-03 -0.338290  0.222988 -0.270507\n",
       "2016-01-04  0.114369  0.499945 -0.545886\n",
       "2016-01-05  0.085580 -1.282786  1.911286\n",
       "2016-01-06  0.568756  0.975439  0.181616"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,'B':'D'] = np.random.randn(len(df), 3)\n",
    "df.loc[:,'B':'D']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>0.456000</td>\n",
       "      <td>-0.255574</td>\n",
       "      <td>0.461626</td>\n",
       "      <td>1.589978</td>\n",
       "      <td>1</td>\n",
       "      <td>1.430759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-0.211297</td>\n",
       "      <td>-0.915713</td>\n",
       "      <td>0.669892</td>\n",
       "      <td>2</td>\n",
       "      <td>-0.426582</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.338290</td>\n",
       "      <td>0.222988</td>\n",
       "      <td>-0.270507</td>\n",
       "      <td>3</td>\n",
       "      <td>-0.418479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>0.114369</td>\n",
       "      <td>0.499945</td>\n",
       "      <td>-0.545886</td>\n",
       "      <td>4</td>\n",
       "      <td>0.419359</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D  F         E\n",
       "2016-01-01  0.456000 -0.255574  0.461626  1.589978  1  1.430759\n",
       "2016-01-02  0.300128 -0.211297 -0.915713  0.669892  2 -0.426582\n",
       "2016-01-03 -0.599576 -0.338290  0.222988 -0.270507  3 -0.418479\n",
       "2016-01-04 -0.475801  0.114369  0.499945 -0.545886  4  0.419359"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])\n",
    "df1.loc[:, 'E'] = np.random.randn(len(df1))\n",
    "df1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>0.456000</td>\n",
       "      <td>-0.255574</td>\n",
       "      <td>0.461626</td>\n",
       "      <td>1.589978</td>\n",
       "      <td>1</td>\n",
       "      <td>1.430759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.338290</td>\n",
       "      <td>0.222988</td>\n",
       "      <td>-0.270507</td>\n",
       "      <td>3</td>\n",
       "      <td>-0.418479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>0.114369</td>\n",
       "      <td>0.499945</td>\n",
       "      <td>-0.545886</td>\n",
       "      <td>4</td>\n",
       "      <td>0.419359</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D  F         E\n",
       "2016-01-01  0.456000 -0.255574  0.461626  1.589978  1  1.430759\n",
       "2016-01-03 -0.599576 -0.338290  0.222988 -0.270507  3 -0.418479\n",
       "2016-01-04 -0.475801  0.114369  0.499945 -0.545886  4  0.419359"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.iloc[1,5] = np.nan\n",
    "df1.dropna(how='any')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>0.456000</td>\n",
       "      <td>-0.255574</td>\n",
       "      <td>0.461626</td>\n",
       "      <td>1.589978</td>\n",
       "      <td>1</td>\n",
       "      <td>1.430759</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.300128</td>\n",
       "      <td>-0.211297</td>\n",
       "      <td>-0.915713</td>\n",
       "      <td>0.669892</td>\n",
       "      <td>2</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-0.599576</td>\n",
       "      <td>-0.338290</td>\n",
       "      <td>0.222988</td>\n",
       "      <td>-0.270507</td>\n",
       "      <td>3</td>\n",
       "      <td>-0.418479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.475801</td>\n",
       "      <td>0.114369</td>\n",
       "      <td>0.499945</td>\n",
       "      <td>-0.545886</td>\n",
       "      <td>4</td>\n",
       "      <td>0.419359</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D  F         E\n",
       "2016-01-01  0.456000 -0.255574  0.461626  1.589978  1  1.430759\n",
       "2016-01-02  0.300128 -0.211297 -0.915713  0.669892  2  5.000000\n",
       "2016-01-03 -0.599576 -0.338290  0.222988 -0.270507  3 -0.418479\n",
       "2016-01-04 -0.475801  0.114369  0.499945 -0.545886  4  0.419359"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.iloc[1,5] = np.nan\n",
    "df1.fillna(value=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                A      B      C      D      F      E\n",
       "2016-01-01  False  False  False  False  False  False\n",
       "2016-01-02  False  False  False  False  False   True\n",
       "2016-01-03  False  False  False  False  False  False\n",
       "2016-01-04  False  False  False  False  False  False"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.isnull(df1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.007373\n",
       "B   -0.062859\n",
       "C    0.342307\n",
       "D    0.425754\n",
       "F    3.500000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01    NaN\n",
       "2016-01-02    NaN\n",
       "2016-01-03    1.0\n",
       "2016-01-04    3.0\n",
       "2016-01-05    5.0\n",
       "2016-01-06    NaN\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>-1.599576</td>\n",
       "      <td>-1.338290</td>\n",
       "      <td>-0.777012</td>\n",
       "      <td>-1.270507</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-3.475801</td>\n",
       "      <td>-2.885631</td>\n",
       "      <td>-2.500055</td>\n",
       "      <td>-3.545886</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-5.314875</td>\n",
       "      <td>-4.914420</td>\n",
       "      <td>-6.282786</td>\n",
       "      <td>-3.088714</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D    F\n",
       "2016-01-01       NaN       NaN       NaN       NaN  NaN\n",
       "2016-01-02       NaN       NaN       NaN       NaN  NaN\n",
       "2016-01-03 -1.599576 -1.338290 -0.777012 -1.270507  2.0\n",
       "2016-01-04 -3.475801 -2.885631 -2.500055 -3.545886  1.0\n",
       "2016-01-05 -5.314875 -4.914420 -6.282786 -3.088714  0.0\n",
       "2016-01-06       NaN       NaN       NaN       NaN  NaN"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sub(s, axis='index')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2016-01-01</th>\n",
       "      <td>0.456000</td>\n",
       "      <td>-0.255574</td>\n",
       "      <td>0.461626</td>\n",
       "      <td>1.589978</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-02</th>\n",
       "      <td>0.756128</td>\n",
       "      <td>-0.466871</td>\n",
       "      <td>-0.454087</td>\n",
       "      <td>2.259870</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-03</th>\n",
       "      <td>0.156553</td>\n",
       "      <td>-0.805161</td>\n",
       "      <td>-0.231099</td>\n",
       "      <td>1.989363</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-04</th>\n",
       "      <td>-0.319248</td>\n",
       "      <td>-0.690793</td>\n",
       "      <td>0.268845</td>\n",
       "      <td>1.443477</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-05</th>\n",
       "      <td>-0.634123</td>\n",
       "      <td>-0.605212</td>\n",
       "      <td>-1.013940</td>\n",
       "      <td>3.354763</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2016-01-06</th>\n",
       "      <td>-0.213954</td>\n",
       "      <td>-0.036456</td>\n",
       "      <td>-0.038501</td>\n",
       "      <td>3.536379</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D   F\n",
       "2016-01-01  0.456000 -0.255574  0.461626  1.589978   1\n",
       "2016-01-02  0.756128 -0.466871 -0.454087  2.259870   3\n",
       "2016-01-03  0.156553 -0.805161 -0.231099  1.989363   6\n",
       "2016-01-04 -0.319248 -0.690793  0.268845  1.443477  10\n",
       "2016-01-05 -0.634123 -0.605212 -1.013940  3.354763  15\n",
       "2016-01-06 -0.213954 -0.036456 -0.038501  3.536379  21"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(np.cumsum)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2, 3],\n",
       "       [5, 7, 9]])"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.array([[1,2,3], [4,5,6]])\n",
    "np.cumsum(a,axis=0)      # sum over rows for each of the 3 columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1,  3,  6],\n",
       "       [ 4,  9, 15]])"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.cumsum(a,axis=1)      # sum over columns for each of the 2 rows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A             (0.456, -0.599575852939)\n",
       "B    (0.568755883988, -0.338290005074)\n",
       "C     (0.975439056039, -1.28278567073)\n",
       "D     (1.91128583525, -0.545886260128)\n",
       "F                           (6.0, 1.0)\n",
       "dtype: object"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(lambda x: (x.max(),  x.min()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    5\n",
       "6    1\n",
       "5    1\n",
       "4    1\n",
       "3    1\n",
       "0    1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randint(0, 7, size=10))\n",
    "s.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       a\n",
       "1       b\n",
       "2       c\n",
       "3    aaba\n",
       "4    baca\n",
       "5     NaN\n",
       "6    caba\n",
       "7     dog\n",
       "8     cat\n",
       "dtype: object"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])\n",
    "s.str.lower()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       A\n",
       "1       B\n",
       "2       C\n",
       "3    Aaba\n",
       "4    Baca\n",
       "5     NaN\n",
       "6    Caba\n",
       "7     Dog\n",
       "8     Cat\n",
       "dtype: object"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.str.capitalize()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'ABCAabaBacaCABAdogcat'"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s.str.cat()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.059028</td>\n",
       "      <td>-1.120268</td>\n",
       "      <td>1.624377</td>\n",
       "      <td>0.370611</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.504340</td>\n",
       "      <td>-2.523309</td>\n",
       "      <td>0.615287</td>\n",
       "      <td>-0.762970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.515284</td>\n",
       "      <td>-0.683369</td>\n",
       "      <td>2.530299</td>\n",
       "      <td>-0.015027</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0 -1.059028 -1.120268  1.624377  0.370611\n",
       "1 -1.504340 -2.523309  0.615287 -0.762970\n",
       "2  1.515284 -0.683369  2.530299 -0.015027"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(10, 4))\n",
    "pieces = [df[:3], df[3:7], df[7:]]\n",
    "pieces[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1.059028</td>\n",
       "      <td>-1.120268</td>\n",
       "      <td>1.624377</td>\n",
       "      <td>0.370611</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.504340</td>\n",
       "      <td>-2.523309</td>\n",
       "      <td>0.615287</td>\n",
       "      <td>-0.762970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.515284</td>\n",
       "      <td>-0.683369</td>\n",
       "      <td>2.530299</td>\n",
       "      <td>-0.015027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.033077</td>\n",
       "      <td>0.046818</td>\n",
       "      <td>1.565155</td>\n",
       "      <td>-0.528985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.677357</td>\n",
       "      <td>-0.607068</td>\n",
       "      <td>0.923661</td>\n",
       "      <td>-0.652335</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.126987</td>\n",
       "      <td>0.475494</td>\n",
       "      <td>0.318234</td>\n",
       "      <td>-0.679591</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-0.378396</td>\n",
       "      <td>0.302890</td>\n",
       "      <td>0.522557</td>\n",
       "      <td>0.236514</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.356856</td>\n",
       "      <td>0.484882</td>\n",
       "      <td>-1.873572</td>\n",
       "      <td>-1.366465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>-0.425059</td>\n",
       "      <td>-1.438038</td>\n",
       "      <td>1.680969</td>\n",
       "      <td>0.166428</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-0.289812</td>\n",
       "      <td>0.447258</td>\n",
       "      <td>1.318828</td>\n",
       "      <td>-1.344262</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0 -1.059028 -1.120268  1.624377  0.370611\n",
       "1 -1.504340 -2.523309  0.615287 -0.762970\n",
       "2  1.515284 -0.683369  2.530299 -0.015027\n",
       "3  0.033077  0.046818  1.565155 -0.528985\n",
       "4  1.677357 -0.607068  0.923661 -0.652335\n",
       "5  1.126987  0.475494  0.318234 -0.679591\n",
       "6 -0.378396  0.302890  0.522557  0.236514\n",
       "7  0.356856  0.484882 -1.873572 -1.366465\n",
       "8 -0.425059 -1.438038  1.680969  0.166428\n",
       "9 -0.289812  0.447258  1.318828 -1.344262"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.concat(pieces)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval  rval\n",
       "0  foo     1     4\n",
       "1  foo     1     5\n",
       "2  foo     2     4\n",
       "3  foo     2     5"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})\n",
    "right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})\n",
    "pd.merge(left, right, on='key')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval  rval\n",
       "0  foo     1     4\n",
       "1  bar     2     5"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({'key': ['foo', 'bar'], 'lval': [1, 2]})\n",
    "right = pd.DataFrame({'key': ['foo', 'bar'], 'rval': [4, 5]})\n",
    "pd.merge(left, right, on='key')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>3</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>bar</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval  rval\n",
       "0  foo     1     4\n",
       "1  foo     1     6\n",
       "2  foo     3     4\n",
       "3  foo     3     6\n",
       "4  bar     2     5"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "left = pd.DataFrame({'key': ['foo', 'bar', 'foo'], 'lval': [1, 2, 3]})\n",
    "right = pd.DataFrame({'key': ['foo', 'bar', 'foo'], 'rval': [4, 5, 6]})\n",
    "joined = pd.merge(left, right, on='key')\n",
    "joined"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "joined[joined.key == 'foo'].lval.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>key</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>8</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     lval  rval\n",
       "key            \n",
       "bar     2     5\n",
       "foo     8    20"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "joined.groupby(by='key').sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.693852</td>\n",
       "      <td>0.380116</td>\n",
       "      <td>-0.537467</td>\n",
       "      <td>0.718994</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.519064</td>\n",
       "      <td>-1.670189</td>\n",
       "      <td>1.500503</td>\n",
       "      <td>-0.874475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.474730</td>\n",
       "      <td>-0.195771</td>\n",
       "      <td>0.906235</td>\n",
       "      <td>1.344520</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.204044</td>\n",
       "      <td>0.285800</td>\n",
       "      <td>-0.033744</td>\n",
       "      <td>-0.796363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.566253</td>\n",
       "      <td>2.880699</td>\n",
       "      <td>0.425773</td>\n",
       "      <td>-1.248533</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-1.277346</td>\n",
       "      <td>-0.703705</td>\n",
       "      <td>-0.666372</td>\n",
       "      <td>-0.026142</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>-0.025699</td>\n",
       "      <td>0.070667</td>\n",
       "      <td>-0.125603</td>\n",
       "      <td>1.240501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0.073028</td>\n",
       "      <td>1.115051</td>\n",
       "      <td>-0.197851</td>\n",
       "      <td>0.295895</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.204044</td>\n",
       "      <td>0.285800</td>\n",
       "      <td>-0.033744</td>\n",
       "      <td>-0.796363</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D\n",
       "0  0.693852  0.380116 -0.537467  0.718994\n",
       "1 -1.519064 -1.670189  1.500503 -0.874475\n",
       "2 -0.474730 -0.195771  0.906235  1.344520\n",
       "3  0.204044  0.285800 -0.033744 -0.796363\n",
       "4  0.566253  2.880699  0.425773 -1.248533\n",
       "5 -1.277346 -0.703705 -0.666372 -0.026142\n",
       "6 -0.025699  0.070667 -0.125603  1.240501\n",
       "7  0.073028  1.115051 -0.197851  0.295895\n",
       "8  0.204044  0.285800 -0.033744 -0.796363"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])\n",
    "s = df.iloc[3]\n",
    "df.append(s, ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',\n",
    "                           'foo', 'bar', 'foo', 'foo'],\n",
    "                    'B' : ['one', 'one', 'two', 'three',\n",
    "                           'two', 'two', 'one', 'three'],\n",
    "                    'C' : np.random.randn(8),\n",
    "                    'D' : np.random.randn(8)})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>0.959818</td>\n",
       "      <td>0.482899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>0.528382</td>\n",
       "      <td>0.780784</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.604226</td>\n",
       "      <td>-0.148678</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.291821</td>\n",
       "      <td>3.435465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>-1.599292</td>\n",
       "      <td>-0.207794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>1.904411</td>\n",
       "      <td>-0.599106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  C         D\n",
       "A   B                        \n",
       "bar one    0.959818  0.482899\n",
       "    three  0.528382  0.780784\n",
       "    two   -0.604226 -0.148678\n",
       "foo one   -0.291821  3.435465\n",
       "    three -1.599292 -0.207794\n",
       "    two    1.904411 -0.599106"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['A','B']).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('bar', 'one'),\n",
       " ('bar', 'two'),\n",
       " ('baz', 'one'),\n",
       " ('baz', 'two'),\n",
       " ('foo', 'one'),\n",
       " ('foo', 'two'),\n",
       " ('qux', 'one'),\n",
       " ('qux', 'two')]"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',\n",
    "                       'foo', 'foo', 'qux', 'qux'],\n",
    "                      ['one', 'two'] * 4]))\n",
    "tuples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MultiIndex(levels=[['bar', 'baz', 'foo', 'qux'], ['one', 'two']],\n",
       "           labels=[[0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 0, 1, 0, 1, 0, 1]],\n",
       "           names=['first', 'second'])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])\n",
    "index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>1.418252</td>\n",
       "      <td>0.344219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>2.158640</td>\n",
       "      <td>1.098525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>1.548549</td>\n",
       "      <td>-0.859605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.605646</td>\n",
       "      <td>-0.437083</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>-1.096479</td>\n",
       "      <td>-0.670109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-1.304646</td>\n",
       "      <td>-0.638496</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">qux</th>\n",
       "      <th>one</th>\n",
       "      <td>1.393073</td>\n",
       "      <td>0.169382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.706941</td>\n",
       "      <td>-1.544308</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     1.418252  0.344219\n",
       "      two     2.158640  1.098525\n",
       "baz   one     1.548549 -0.859605\n",
       "      two     0.605646 -0.437083\n",
       "foo   one    -1.096479 -0.670109\n",
       "      two    -1.304646 -0.638496\n",
       "qux   one     1.393073  0.169382\n",
       "      two    -0.706941 -1.544308"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -1.096479\n",
       "B   -0.670109\n",
       "Name: (foo, one), dtype: float64"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['foo', 'one']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "second\n",
       "one   -1.096479\n",
       "two   -1.304646\n",
       "Name: A, dtype: float64"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['foo', :].A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df2 = df[:4]\n",
    "stacked = df2.stack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>1.418252</td>\n",
       "      <td>0.344219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>2.158640</td>\n",
       "      <td>1.098525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>1.548549</td>\n",
       "      <td>-0.859605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.605646</td>\n",
       "      <td>-0.437083</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     1.418252  0.344219\n",
       "      two     2.158640  1.098525\n",
       "baz   one     1.548549 -0.859605\n",
       "      two     0.605646 -0.437083"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>first</th>\n",
       "      <th>bar</th>\n",
       "      <th>baz</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>1.418252</td>\n",
       "      <td>1.548549</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.344219</td>\n",
       "      <td>-0.859605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>2.158640</td>\n",
       "      <td>0.605646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1.098525</td>\n",
       "      <td>-0.437083</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "first          bar       baz\n",
       "second                      \n",
       "one    A  1.418252  1.548549\n",
       "       B  0.344219 -0.859605\n",
       "two    A  2.158640  0.605646\n",
       "       B  1.098525 -0.437083"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>second</th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>A</th>\n",
       "      <td>1.418252</td>\n",
       "      <td>2.158640</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.344219</td>\n",
       "      <td>1.098525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>A</th>\n",
       "      <td>1.548549</td>\n",
       "      <td>0.605646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-0.859605</td>\n",
       "      <td>-0.437083</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "second        one       two\n",
       "first                      \n",
       "bar   A  1.418252  2.158640\n",
       "      B  0.344219  1.098525\n",
       "baz   A  1.548549  0.605646\n",
       "      B -0.859605 -0.437083"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>1.418252</td>\n",
       "      <td>0.344219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>2.158640</td>\n",
       "      <td>1.098525</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>1.548549</td>\n",
       "      <td>-0.859605</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>0.605646</td>\n",
       "      <td>-0.437083</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     1.418252  0.344219\n",
       "      two     2.158640  1.098525\n",
       "baz   one     1.548549 -0.859605\n",
       "      two     0.605646 -0.437083"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>1.909743</td>\n",
       "      <td>-1.031671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.831524</td>\n",
       "      <td>0.313129</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>two</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>-2.479031</td>\n",
       "      <td>-0.349880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>three</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>1.870952</td>\n",
       "      <td>-0.399249</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>one</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.667440</td>\n",
       "      <td>-0.830666</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.574107</td>\n",
       "      <td>0.083309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>two</td>\n",
       "      <td>A</td>\n",
       "      <td>foo</td>\n",
       "      <td>1.492254</td>\n",
       "      <td>-0.455791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>three</td>\n",
       "      <td>B</td>\n",
       "      <td>foo</td>\n",
       "      <td>0.521125</td>\n",
       "      <td>-0.363571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>one</td>\n",
       "      <td>C</td>\n",
       "      <td>foo</td>\n",
       "      <td>-0.995509</td>\n",
       "      <td>2.005160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>one</td>\n",
       "      <td>A</td>\n",
       "      <td>bar</td>\n",
       "      <td>-0.103448</td>\n",
       "      <td>0.538178</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>two</td>\n",
       "      <td>B</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.728369</td>\n",
       "      <td>1.025718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>three</td>\n",
       "      <td>C</td>\n",
       "      <td>bar</td>\n",
       "      <td>0.359507</td>\n",
       "      <td>0.655292</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        A  B    C         D         E\n",
       "0     one  A  foo  1.909743 -1.031671\n",
       "1     one  B  foo -0.831524  0.313129\n",
       "2     two  C  foo -2.479031 -0.349880\n",
       "3   three  A  bar  1.870952 -0.399249\n",
       "4     one  B  bar  0.667440 -0.830666\n",
       "5     one  C  bar -0.574107  0.083309\n",
       "6     two  A  foo  1.492254 -0.455791\n",
       "7   three  B  foo  0.521125 -0.363571\n",
       "8     one  C  foo -0.995509  2.005160\n",
       "9     one  A  bar -0.103448  0.538178\n",
       "10    two  B  bar  0.728369  1.025718\n",
       "11  three  C  bar  0.359507  0.655292"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three'] * 3,\n",
    "                  'B' : ['A', 'B', 'C'] * 4,\n",
    "                  'C' : ['foo', 'foo', 'foo', 'bar', 'bar', 'bar'] * 2,\n",
    "                  'D' : np.random.randn(12),\n",
    "                  'E' : np.random.randn(12)})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>bar</th>\n",
       "      <th>foo</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">one</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.103448</td>\n",
       "      <td>1.909743</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.667440</td>\n",
       "      <td>-0.831524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>-0.574107</td>\n",
       "      <td>-0.995509</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">three</th>\n",
       "      <th>A</th>\n",
       "      <td>1.870952</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.521125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>0.359507</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">two</th>\n",
       "      <th>A</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1.492254</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.728369</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-2.479031</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "C             bar       foo\n",
       "A     B                    \n",
       "one   A -0.103448  1.909743\n",
       "      B  0.667440 -0.831524\n",
       "      C -0.574107 -0.995509\n",
       "three A  1.870952       NaN\n",
       "      B       NaN  0.521125\n",
       "      C  0.359507       NaN\n",
       "two   A       NaN  1.492254\n",
       "      B  0.728369       NaN\n",
       "      C       NaN -2.479031"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>City</th>\n",
       "      <th>Province</th>\n",
       "      <th>Sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Toronto</td>\n",
       "      <td>ON</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Montreal</td>\n",
       "      <td>QC</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Vancouver</td>\n",
       "      <td>BC</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Calgary</td>\n",
       "      <td>AL</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Edmonton</td>\n",
       "      <td>AL</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Winnipeg</td>\n",
       "      <td>MN</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Windsor</td>\n",
       "      <td>ON</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        City Province  Sales\n",
       "0    Toronto       ON     13\n",
       "1   Montreal       QC      6\n",
       "2  Vancouver       BC     16\n",
       "3    Calgary       AL      8\n",
       "4   Edmonton       AL      4\n",
       "5   Winnipeg       MN      3\n",
       "6    Windsor       ON      1"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(data={'Province' : ['ON','QC','BC','AL','AL','MN','ON'],\n",
    "                         'City' : ['Toronto','Montreal','Vancouver','Calgary','Edmonton','Winnipeg','Windsor'],\n",
    "                         'Sales' : [13,6,16,8,4,3,1]})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <th colspan=\"8\" halign=\"left\">Sales</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>City</th>\n",
       "      <th>Calgary</th>\n",
       "      <th>Edmonton</th>\n",
       "      <th>Montreal</th>\n",
       "      <th>Toronto</th>\n",
       "      <th>Vancouver</th>\n",
       "      <th>Windsor</th>\n",
       "      <th>Winnipeg</th>\n",
       "      <th>All</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Province</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AL</th>\n",
       "      <td>8.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BC</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MN</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ON</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>QC</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>All</th>\n",
       "      <td>8.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>13.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>51.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Sales                                                           \n",
       "City     Calgary Edmonton Montreal Toronto Vancouver Windsor Winnipeg   All\n",
       "Province                                                                   \n",
       "AL           8.0      4.0      NaN     NaN       NaN     NaN      NaN  12.0\n",
       "BC           NaN      NaN      NaN     NaN      16.0     NaN      NaN  16.0\n",
       "MN           NaN      NaN      NaN     NaN       NaN     NaN      3.0   3.0\n",
       "ON           NaN      NaN      NaN    13.0       NaN     1.0      NaN  14.0\n",
       "QC           NaN      NaN      6.0     NaN       NaN     NaN      NaN   6.0\n",
       "All          8.0      4.0      6.0    13.0      16.0     1.0      3.0  51.0"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table = pd.pivot_table(df,values=['Sales'],index=['Province'],columns=['City'],aggfunc=np.sum,margins=True)\n",
    "table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Sales</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Province</th>\n",
       "      <th>City</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">AL</th>\n",
       "      <th>All</th>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calgary</th>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Edmonton</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">BC</th>\n",
       "      <th>All</th>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vancouver</th>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">MN</th>\n",
       "      <th>All</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Winnipeg</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">ON</th>\n",
       "      <th>All</th>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Toronto</th>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Windsor</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">QC</th>\n",
       "      <th>All</th>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montreal</th>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"8\" valign=\"top\">All</th>\n",
       "      <th>All</th>\n",
       "      <td>51.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calgary</th>\n",
       "      <td>8.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Edmonton</th>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Montreal</th>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Toronto</th>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Vancouver</th>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Windsor</th>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Winnipeg</th>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                    Sales\n",
       "Province City            \n",
       "AL       All         12.0\n",
       "         Calgary      8.0\n",
       "         Edmonton     4.0\n",
       "BC       All         16.0\n",
       "         Vancouver   16.0\n",
       "MN       All          3.0\n",
       "         Winnipeg     3.0\n",
       "ON       All         14.0\n",
       "         Toronto     13.0\n",
       "         Windsor      1.0\n",
       "QC       All          6.0\n",
       "         Montreal     6.0\n",
       "All      All         51.0\n",
       "         Calgary      8.0\n",
       "         Edmonton     4.0\n",
       "         Montreal     6.0\n",
       "         Toronto     13.0\n",
       "         Vancouver   16.0\n",
       "         Windsor      1.0\n",
       "         Winnipeg     3.0"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "table.stack('City')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timestamp('2016-01-01 00:00:50', freq='S')"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range('1/1/2016', periods=100, freq='S')\n",
    "rng[50]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(rng)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01 00:00:00    493\n",
       "2016-01-01 00:00:01     49\n",
       "2016-01-01 00:00:02    360\n",
       "2016-01-01 00:00:03    208\n",
       "2016-01-01 00:00:04    395\n",
       "Freq: S, dtype: int64"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)\n",
    "ts.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "ts5 = ts.resample('5Min')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01    100\n",
       "Freq: 5T, dtype: int64"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts5.count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01    235.5\n",
       "Freq: 5T, dtype: float64"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts5.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2016-01-01    493\n",
       "Freq: 10T, dtype: int64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts.asfreq('10T')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>raw_grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade\n",
       "0   1         a\n",
       "1   2         b\n",
       "2   3         b\n",
       "3   4         a\n",
       "4   5         a\n",
       "5   6         e"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"id\":[1,2,3,4,5,6], \"raw_grade\":['a', 'b', 'b', 'a', 'a', 'e']})\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    a\n",
       "1    b\n",
       "2    b\n",
       "3    a\n",
       "4    a\n",
       "5    e\n",
       "Name: grade, dtype: category\n",
       "Categories (3, object): [a, b, e]"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"raw_grade\"].astype(\"category\")\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>raw_grade</th>\n",
       "      <th>grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "      <td>normal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "      <td>normal</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>a</td>\n",
       "      <td>good</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "      <td>bad</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade   grade\n",
       "0   1         a    good\n",
       "1   2         b  normal\n",
       "2   3         b  normal\n",
       "3   4         a    good\n",
       "4   5         a    good\n",
       "5   6         e     bad"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"].cat.categories = [\"good\", \"normal\", \"bad\"]\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "grade\n",
       "good      3\n",
       "normal    2\n",
       "bad       1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"grade\").size()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5af3caba90>"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5af3cabc18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2016', periods=1000))\n",
    "ts = ts.cumsum()\n",
    "ts.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,\n",
    "                   columns=['A', 'B', 'C', 'D'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f5af3b99e80>"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5af3bac518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5af3ba2470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = df.cumsum()\n",
    "plt.figure(); df.plot(); plt.legend(loc='best')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df.to_csv('/tmp/foo.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-01-01</td>\n",
       "      <td>-1.472267</td>\n",
       "      <td>0.729663</td>\n",
       "      <td>-0.246746</td>\n",
       "      <td>-1.329225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-01-02</td>\n",
       "      <td>1.153705</td>\n",
       "      <td>0.174238</td>\n",
       "      <td>-0.362552</td>\n",
       "      <td>-1.136000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-01-03</td>\n",
       "      <td>2.259932</td>\n",
       "      <td>-0.265956</td>\n",
       "      <td>-1.281259</td>\n",
       "      <td>1.107218</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-01-04</td>\n",
       "      <td>0.516835</td>\n",
       "      <td>0.351568</td>\n",
       "      <td>-1.791915</td>\n",
       "      <td>1.160235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-01-05</td>\n",
       "      <td>1.764396</td>\n",
       "      <td>0.847493</td>\n",
       "      <td>-0.755602</td>\n",
       "      <td>1.405774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2016-01-06</td>\n",
       "      <td>1.901552</td>\n",
       "      <td>1.985447</td>\n",
       "      <td>-0.485485</td>\n",
       "      <td>0.651438</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>2016-01-07</td>\n",
       "      <td>-0.713619</td>\n",
       "      <td>0.665964</td>\n",
       "      <td>-1.264428</td>\n",
       "      <td>0.131503</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2016-01-08</td>\n",
       "      <td>-0.727720</td>\n",
       "      <td>0.299134</td>\n",
       "      <td>-1.225155</td>\n",
       "      <td>0.390531</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>2016-01-09</td>\n",
       "      <td>-0.806458</td>\n",
       "      <td>-0.709848</td>\n",
       "      <td>0.222467</td>\n",
       "      <td>-1.052555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>2016-01-10</td>\n",
       "      <td>-0.758761</td>\n",
       "      <td>-0.779754</td>\n",
       "      <td>-1.303136</td>\n",
       "      <td>-1.391486</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>2016-01-11</td>\n",
       "      <td>-0.576106</td>\n",
       "      <td>1.409800</td>\n",
       "      <td>0.286678</td>\n",
       "      <td>-0.561891</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>2016-01-12</td>\n",
       "      <td>1.328112</td>\n",
       "      <td>1.593942</td>\n",
       "      <td>-0.686082</td>\n",
       "      <td>-0.288739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>2016-01-13</td>\n",
       "      <td>1.539278</td>\n",
       "      <td>0.417253</td>\n",
       "      <td>0.443539</td>\n",
       "      <td>-1.618942</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>2016-01-14</td>\n",
       "      <td>1.376714</td>\n",
       "      <td>0.501398</td>\n",
       "      <td>-0.051566</td>\n",
       "      <td>-0.863489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>2016-01-15</td>\n",
       "      <td>3.709901</td>\n",
       "      <td>-0.692618</td>\n",
       "      <td>-0.134150</td>\n",
       "      <td>-2.178159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>2016-01-16</td>\n",
       "      <td>2.785821</td>\n",
       "      <td>-0.604782</td>\n",
       "      <td>-0.489265</td>\n",
       "      <td>-4.211451</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>2016-01-17</td>\n",
       "      <td>2.252050</td>\n",
       "      <td>-0.746658</td>\n",
       "      <td>-0.838257</td>\n",
       "      <td>-4.319875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>2016-01-18</td>\n",
       "      <td>2.079520</td>\n",
       "      <td>-0.978843</td>\n",
       "      <td>-0.477834</td>\n",
       "      <td>-4.479816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>2016-01-19</td>\n",
       "      <td>2.006081</td>\n",
       "      <td>-0.441083</td>\n",
       "      <td>-0.341435</td>\n",
       "      <td>-3.321521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>2016-01-20</td>\n",
       "      <td>1.698102</td>\n",
       "      <td>-0.596184</td>\n",
       "      <td>0.363860</td>\n",
       "      <td>-4.815550</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>2016-01-21</td>\n",
       "      <td>1.845667</td>\n",
       "      <td>-0.590472</td>\n",
       "      <td>-0.135938</td>\n",
       "      <td>-7.685299</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>2016-01-22</td>\n",
       "      <td>3.095276</td>\n",
       "      <td>-1.425742</td>\n",
       "      <td>1.852828</td>\n",
       "      <td>-7.828404</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>2016-01-23</td>\n",
       "      <td>3.071432</td>\n",
       "      <td>-0.454694</td>\n",
       "      <td>2.242908</td>\n",
       "      <td>-6.654769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>2016-01-24</td>\n",
       "      <td>2.757107</td>\n",
       "      <td>0.329038</td>\n",
       "      <td>0.825996</td>\n",
       "      <td>-7.018920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>2016-01-25</td>\n",
       "      <td>3.437799</td>\n",
       "      <td>-0.044990</td>\n",
       "      <td>1.565256</td>\n",
       "      <td>-7.737598</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>2016-01-26</td>\n",
       "      <td>5.623934</td>\n",
       "      <td>-0.611702</td>\n",
       "      <td>-0.528368</td>\n",
       "      <td>-6.108356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>2016-01-27</td>\n",
       "      <td>5.713503</td>\n",
       "      <td>-1.163633</td>\n",
       "      <td>2.359329</td>\n",
       "      <td>-7.458444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>2016-01-28</td>\n",
       "      <td>5.981479</td>\n",
       "      <td>-0.377824</td>\n",
       "      <td>2.365417</td>\n",
       "      <td>-7.989935</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>2016-01-29</td>\n",
       "      <td>4.232721</td>\n",
       "      <td>-1.741555</td>\n",
       "      <td>2.447671</td>\n",
       "      <td>-6.227620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>2016-01-30</td>\n",
       "      <td>4.428278</td>\n",
       "      <td>-1.622673</td>\n",
       "      <td>2.969354</td>\n",
       "      <td>-5.258456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>970</th>\n",
       "      <td>2018-08-28</td>\n",
       "      <td>-52.823684</td>\n",
       "      <td>30.636945</td>\n",
       "      <td>-22.702678</td>\n",
       "      <td>-15.484657</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>971</th>\n",
       "      <td>2018-08-29</td>\n",
       "      <td>-52.719815</td>\n",
       "      <td>29.058753</td>\n",
       "      <td>-20.883434</td>\n",
       "      <td>-14.837328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>972</th>\n",
       "      <td>2018-08-30</td>\n",
       "      <td>-52.985636</td>\n",
       "      <td>29.270714</td>\n",
       "      <td>-21.446059</td>\n",
       "      <td>-14.329739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>973</th>\n",
       "      <td>2018-08-31</td>\n",
       "      <td>-53.620081</td>\n",
       "      <td>29.432634</td>\n",
       "      <td>-21.657302</td>\n",
       "      <td>-11.314589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>974</th>\n",
       "      <td>2018-09-01</td>\n",
       "      <td>-54.160600</td>\n",
       "      <td>28.035477</td>\n",
       "      <td>-22.787904</td>\n",
       "      <td>-13.306756</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>2018-09-02</td>\n",
       "      <td>-54.544184</td>\n",
       "      <td>29.468354</td>\n",
       "      <td>-24.290570</td>\n",
       "      <td>-13.771770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>2018-09-03</td>\n",
       "      <td>-54.169136</td>\n",
       "      <td>29.567201</td>\n",
       "      <td>-24.524047</td>\n",
       "      <td>-11.705266</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>2018-09-04</td>\n",
       "      <td>-54.453396</td>\n",
       "      <td>27.649564</td>\n",
       "      <td>-24.412633</td>\n",
       "      <td>-11.315816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>2018-09-05</td>\n",
       "      <td>-52.747656</td>\n",
       "      <td>27.896040</td>\n",
       "      <td>-23.585375</td>\n",
       "      <td>-12.442453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>2018-09-06</td>\n",
       "      <td>-51.885266</td>\n",
       "      <td>27.893193</td>\n",
       "      <td>-24.428205</td>\n",
       "      <td>-11.730105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>980</th>\n",
       "      <td>2018-09-07</td>\n",
       "      <td>-52.068723</td>\n",
       "      <td>28.523893</td>\n",
       "      <td>-23.945272</td>\n",
       "      <td>-11.174707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>981</th>\n",
       "      <td>2018-09-08</td>\n",
       "      <td>-53.419467</td>\n",
       "      <td>29.228027</td>\n",
       "      <td>-24.901138</td>\n",
       "      <td>-11.841705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>982</th>\n",
       "      <td>2018-09-09</td>\n",
       "      <td>-52.350102</td>\n",
       "      <td>31.336265</td>\n",
       "      <td>-26.424592</td>\n",
       "      <td>-12.676792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>983</th>\n",
       "      <td>2018-09-10</td>\n",
       "      <td>-52.472074</td>\n",
       "      <td>31.584312</td>\n",
       "      <td>-25.899514</td>\n",
       "      <td>-13.815328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>984</th>\n",
       "      <td>2018-09-11</td>\n",
       "      <td>-52.128129</td>\n",
       "      <td>30.711102</td>\n",
       "      <td>-26.001466</td>\n",
       "      <td>-13.132676</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>985</th>\n",
       "      <td>2018-09-12</td>\n",
       "      <td>-51.926818</td>\n",
       "      <td>30.109186</td>\n",
       "      <td>-25.804750</td>\n",
       "      <td>-12.415718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>986</th>\n",
       "      <td>2018-09-13</td>\n",
       "      <td>-50.883526</td>\n",
       "      <td>31.355452</td>\n",
       "      <td>-24.402931</td>\n",
       "      <td>-14.094863</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>987</th>\n",
       "      <td>2018-09-14</td>\n",
       "      <td>-49.757198</td>\n",
       "      <td>29.873436</td>\n",
       "      <td>-24.556215</td>\n",
       "      <td>-13.880458</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>988</th>\n",
       "      <td>2018-09-15</td>\n",
       "      <td>-48.646073</td>\n",
       "      <td>31.084793</td>\n",
       "      <td>-27.130374</td>\n",
       "      <td>-13.328212</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>989</th>\n",
       "      <td>2018-09-16</td>\n",
       "      <td>-47.985372</td>\n",
       "      <td>30.975511</td>\n",
       "      <td>-26.153500</td>\n",
       "      <td>-14.614523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>990</th>\n",
       "      <td>2018-09-17</td>\n",
       "      <td>-47.740541</td>\n",
       "      <td>33.507656</td>\n",
       "      <td>-26.911970</td>\n",
       "      <td>-13.611337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>991</th>\n",
       "      <td>2018-09-18</td>\n",
       "      <td>-47.525914</td>\n",
       "      <td>34.572762</td>\n",
       "      <td>-27.434347</td>\n",
       "      <td>-13.881902</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>992</th>\n",
       "      <td>2018-09-19</td>\n",
       "      <td>-48.354784</td>\n",
       "      <td>33.810088</td>\n",
       "      <td>-25.974141</td>\n",
       "      <td>-13.400597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>993</th>\n",
       "      <td>2018-09-20</td>\n",
       "      <td>-48.439318</td>\n",
       "      <td>34.763677</td>\n",
       "      <td>-24.652922</td>\n",
       "      <td>-13.738377</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>994</th>\n",
       "      <td>2018-09-21</td>\n",
       "      <td>-49.328151</td>\n",
       "      <td>34.747462</td>\n",
       "      <td>-24.759563</td>\n",
       "      <td>-14.294590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>2018-09-22</td>\n",
       "      <td>-47.895874</td>\n",
       "      <td>34.122599</td>\n",
       "      <td>-24.813399</td>\n",
       "      <td>-13.067777</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>2018-09-23</td>\n",
       "      <td>-47.837956</td>\n",
       "      <td>31.436368</td>\n",
       "      <td>-23.568943</td>\n",
       "      <td>-14.112176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>2018-09-24</td>\n",
       "      <td>-48.915842</td>\n",
       "      <td>32.419209</td>\n",
       "      <td>-23.586387</td>\n",
       "      <td>-13.382559</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>2018-09-25</td>\n",
       "      <td>-49.037703</td>\n",
       "      <td>33.643553</td>\n",
       "      <td>-23.596081</td>\n",
       "      <td>-13.542296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>2018-09-26</td>\n",
       "      <td>-50.169356</td>\n",
       "      <td>31.995149</td>\n",
       "      <td>-25.645872</td>\n",
       "      <td>-13.814658</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     Unnamed: 0          A          B          C          D\n",
       "0    2016-01-01  -1.472267   0.729663  -0.246746  -1.329225\n",
       "1    2016-01-02   1.153705   0.174238  -0.362552  -1.136000\n",
       "2    2016-01-03   2.259932  -0.265956  -1.281259   1.107218\n",
       "3    2016-01-04   0.516835   0.351568  -1.791915   1.160235\n",
       "4    2016-01-05   1.764396   0.847493  -0.755602   1.405774\n",
       "5    2016-01-06   1.901552   1.985447  -0.485485   0.651438\n",
       "6    2016-01-07  -0.713619   0.665964  -1.264428   0.131503\n",
       "7    2016-01-08  -0.727720   0.299134  -1.225155   0.390531\n",
       "8    2016-01-09  -0.806458  -0.709848   0.222467  -1.052555\n",
       "9    2016-01-10  -0.758761  -0.779754  -1.303136  -1.391486\n",
       "10   2016-01-11  -0.576106   1.409800   0.286678  -0.561891\n",
       "11   2016-01-12   1.328112   1.593942  -0.686082  -0.288739\n",
       "12   2016-01-13   1.539278   0.417253   0.443539  -1.618942\n",
       "13   2016-01-14   1.376714   0.501398  -0.051566  -0.863489\n",
       "14   2016-01-15   3.709901  -0.692618  -0.134150  -2.178159\n",
       "15   2016-01-16   2.785821  -0.604782  -0.489265  -4.211451\n",
       "16   2016-01-17   2.252050  -0.746658  -0.838257  -4.319875\n",
       "17   2016-01-18   2.079520  -0.978843  -0.477834  -4.479816\n",
       "18   2016-01-19   2.006081  -0.441083  -0.341435  -3.321521\n",
       "19   2016-01-20   1.698102  -0.596184   0.363860  -4.815550\n",
       "20   2016-01-21   1.845667  -0.590472  -0.135938  -7.685299\n",
       "21   2016-01-22   3.095276  -1.425742   1.852828  -7.828404\n",
       "22   2016-01-23   3.071432  -0.454694   2.242908  -6.654769\n",
       "23   2016-01-24   2.757107   0.329038   0.825996  -7.018920\n",
       "24   2016-01-25   3.437799  -0.044990   1.565256  -7.737598\n",
       "25   2016-01-26   5.623934  -0.611702  -0.528368  -6.108356\n",
       "26   2016-01-27   5.713503  -1.163633   2.359329  -7.458444\n",
       "27   2016-01-28   5.981479  -0.377824   2.365417  -7.989935\n",
       "28   2016-01-29   4.232721  -1.741555   2.447671  -6.227620\n",
       "29   2016-01-30   4.428278  -1.622673   2.969354  -5.258456\n",
       "..          ...        ...        ...        ...        ...\n",
       "970  2018-08-28 -52.823684  30.636945 -22.702678 -15.484657\n",
       "971  2018-08-29 -52.719815  29.058753 -20.883434 -14.837328\n",
       "972  2018-08-30 -52.985636  29.270714 -21.446059 -14.329739\n",
       "973  2018-08-31 -53.620081  29.432634 -21.657302 -11.314589\n",
       "974  2018-09-01 -54.160600  28.035477 -22.787904 -13.306756\n",
       "975  2018-09-02 -54.544184  29.468354 -24.290570 -13.771770\n",
       "976  2018-09-03 -54.169136  29.567201 -24.524047 -11.705266\n",
       "977  2018-09-04 -54.453396  27.649564 -24.412633 -11.315816\n",
       "978  2018-09-05 -52.747656  27.896040 -23.585375 -12.442453\n",
       "979  2018-09-06 -51.885266  27.893193 -24.428205 -11.730105\n",
       "980  2018-09-07 -52.068723  28.523893 -23.945272 -11.174707\n",
       "981  2018-09-08 -53.419467  29.228027 -24.901138 -11.841705\n",
       "982  2018-09-09 -52.350102  31.336265 -26.424592 -12.676792\n",
       "983  2018-09-10 -52.472074  31.584312 -25.899514 -13.815328\n",
       "984  2018-09-11 -52.128129  30.711102 -26.001466 -13.132676\n",
       "985  2018-09-12 -51.926818  30.109186 -25.804750 -12.415718\n",
       "986  2018-09-13 -50.883526  31.355452 -24.402931 -14.094863\n",
       "987  2018-09-14 -49.757198  29.873436 -24.556215 -13.880458\n",
       "988  2018-09-15 -48.646073  31.084793 -27.130374 -13.328212\n",
       "989  2018-09-16 -47.985372  30.975511 -26.153500 -14.614523\n",
       "990  2018-09-17 -47.740541  33.507656 -26.911970 -13.611337\n",
       "991  2018-09-18 -47.525914  34.572762 -27.434347 -13.881902\n",
       "992  2018-09-19 -48.354784  33.810088 -25.974141 -13.400597\n",
       "993  2018-09-20 -48.439318  34.763677 -24.652922 -13.738377\n",
       "994  2018-09-21 -49.328151  34.747462 -24.759563 -14.294590\n",
       "995  2018-09-22 -47.895874  34.122599 -24.813399 -13.067777\n",
       "996  2018-09-23 -47.837956  31.436368 -23.568943 -14.112176\n",
       "997  2018-09-24 -48.915842  32.419209 -23.586387 -13.382559\n",
       "998  2018-09-25 -49.037703  33.643553 -23.596081 -13.542296\n",
       "999  2018-09-26 -50.169356  31.995149 -25.645872 -13.814658\n",
       "\n",
       "[1000 rows x 5 columns]"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv('/tmp/foo.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    " df.to_hdf('/tmp/foo.h5','df')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
